Amazon Web Services (AWS) Session Tags を使用すると、リソースにタグを付け、ユーザーにキーと値のペアを割り当てることで、AWS API とリソースに対するロールベースのアクセス制御 (RBAC) を実装できます。
このガイドの例では、まず AWS Session Tags を使用して AWS リソースにタグを付け、次に、このロールと適切なタグを持つユーザーが AWS リソースに対して特定のアクションを実行できるようにする AWS IAM ロール用のポリシーを作成します。続いて、Auth0 で Rule を作成し、AWS IAM ロールと適切な AWS Session Tags を Auth0 ユーザーに付与して、それらをトークン内の アサーションに含めて渡します。この例は、Configure Amazon Web Services for Single Sign-On の例を基にしています。
AWS API とリソースで AWS Session Tags を使用するには、次の手順が必要です。
- AWS インスタンスにタグを付ける。
- 専用の AWS IAM ロールを作成する。
- Auth0 Rule を作成する。
- 設定をテストする。
AWS リソースにタグを追加します。Amazon Elastic Compute Cloud: Tag your Amazon EC2 resources の手順に従ってください。
3 つのインスタンスを作成済みであることを確認してください。以下のタグを追加します。
| インスタンス | タグ |
|---|
| 1 | キー: CostCenter、値: marketing。 キー: Project、値: website。 |
| 2 | キー: CostCenter、値: engineering。 キー: Project、値: management_dashboard。 |
| 3 | キー: CostCenter、値: marketing。 キー: Project、値: community_site。 |
前提条件で設定した AWS SAML を使用して、IAM ロールを作成します。AWS Identity and Access Management ユーザーガイド: SAML 2.0 フェデレーション用のロールの作成 (コンソール) の手順に従ってください。
ロールを設定する際は、必ず次のパラメーターを使用してください。
| パラメーター | 説明と値の例 |
|---|
| SAML Provider | 前提条件で作成した IDプロバイダーの名前 (auth0SamlProvider など) 。Allow programmatic and AWS Management Console access を選択します。 |
Attach permissions policies を求められたら、次の JSON を使用してポリシーを作成し、名前を VirtualMachineAccessByCostCenter にします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/CostCenter": "<%= "${aws:PrincipalTag/CostCenter}" %>"
}
}
}
]
}
ポリシーを作成したら、ロールのポリシー一覧を更新し、新しいポリシーを絞り込んで選択します。
設定を確認する際は、次のパラメーターを使用してください。
| Parameter | Description |
|---|
| ロール名 | AccessByCostCenter のような、ロールの内容がわかる名前。 |
| ロールの説明 | そのロールの用途を説明するテキスト。 |
AWS のロールとタグをユーザーにマッピングするには、Auth0 で Rule を作成する必要があります。これらの値は、その後トークン内の SAML アサーションを介して渡されます。次の例では:
awsAccount 変数の値は、ご自身のアカウント番号に置き換えてください。
function(user, context, callback) {
var awsAccount = '013823792818';
var rolePrefix = `arn:aws:iam::` + awsAccount;
var samlIdP = rolePrefix + `:saml-provider/auth0SamlProvider`;
user.awsRole = rolePrefix + `:role/AccessByCostCenter,` + samlIdP;
user.awsRoleSession = user.email;
user.awsTagKeys = ['CostCenter', 'Project'];
user.CostCenter = 'marketing';
user.Project = 'website';
context.samlConfiguration.mappings = {
'https://aws.amazon.com/SAML/Attributes/Role': 'awsRole',
'https://aws.amazon.com/SAML/Attributes/RoleSessionName': 'awsRoleSession',
'https://aws.amazon.com/SAML/Attributes/PrincipalTag:CostCenter': 'CostCenter',
'https://aws.amazon.com/SAML/Attributes/PrincipalTag:Project': 'Project'
};
callback(null, user, context);
}
これで、Auth0 ユーザーを使用して AWS コンソールにログインし、実装をテストできるはずです。
ログインするには、AWS コンソール用の ログインが必要です。確認するには、次の手順を実行します。
- Dashboard > Applications > Applications に移動し、表示するアプリケーションの名前を選択します。
- Addons タブで、SAML2 Web App アドオンを有効にします。
- Usage タブで、Identity Provider Login URL を確認します。
- 表示された URL に移動します。
- サインインしたら、EC2 から Instances を選択します。
CostCenter が marketing のインスタンスの1つをクリックし、Actions > Instance State > Stop をクリックします。アクションが正常に完了することを確認します。
CostCenter が engineering のインスタンスをクリックし、Actions > Instance State > Stop をクリックします。アクションがエラーで失敗することを確認します。