コマンドラインインターフェース (CLI) を用いて、Amazon Identity and Access Management (IAM) ロールを割り当てたいと思っています。どのようにすればよいですか?

AWS CLI を使用して IAM ロールを割り当てるには、以下の手順に従います。

注: ロールを割り当てる権限を持っている IAM ユーザーが必要になります。まだいない場合、作成するには、以下の手順に従います。

この例では、ユーザーは EC2 インスタンスへの読み取り専用アクセス権、および IAM ロールを割り当てる権限を持っています。

AWS CLI を使用して、test-user という名前の IAM ユーザーを作成します。

aws iam create-user --user-name test-user

AWS CLI を使用して、test-user に権限を付与する IAM ポリシーを作成します。お気に入りのテキストエディターを使って、IAM ポリシーを定義する JSON ファイルを作成する必要があります。この例では、Linux では一般的な vim を使っています。

vim test-policy.json

test-policy.json ファイルの内容は、次のようなコマンドになります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "iam:ListRoles",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

IAM ポリシーの作成について、詳細は、「新しいポリシーの作成」、「例のポリシー」および「AWS IAM ポリシーのリファレンス」を参照してください。

以下の AWS CLI コマンドを使用して、IAM マネージドポリシーを作成します。

aws iam create-policy --policy-name test-policy --policy-document file://test-policy.json

このコマンドは、IAM ポリシーの ARN (Amazon リソース名) など、情報の断片を出力します。

arn:aws:iam::123456789012:policy/test-policy

出力の IAM ポリシーの ARN はメモしておきます。そして、CLI コマンド 'attach-user-policy' を使用して、ポリシーを test-user にアタッチします。'list-attached-user-policies' を使用して、アタッチメントが存在していることを確認します。

aws iam attach-user-policy --user-name test-user --policy-arn "arn:aws:iam::123456789012:policy/test-policy"
aws iam list-attached-user-policies --user-name test-user

注: 123456789012 はあなたのアカウント ID で置き換えてください。

test-user に割り当てる、RDS DB インスタンスへの読み取り専用アクセス権を持つ IAM ロールを作成します。IAM ロールの信頼関係を定義する JSON ファイルを作成します。この IAM ロールには IAM ユーザーを割り当てるので、IAM ユーザーにそのロールを割り当てることを許可するプリンシパルを指定する必要があります。たとえば、arn:aws:iam::123456789012:root のようなプリンシパルの場合、アカウントのすべての IAM ID にそのロールを割り当てることができます。詳細については、「IAM ユーザーに権限を委任するロールの作成」を参照してください。

また、信頼関係を制限して、IAM ロールは特定の IAM ユーザーのみに割り当てることができるようにすることもできます。これは、arn:aws:iam::123456789012:user/ のようなプリンシパルを指定することで、制限します。詳細については、「個々の IAM ユーザー」を参照してください。

信頼関係を定義する JSON ファイルを作成します。

vim test-role-trust-policy.json

test-role-trust-policy.json ファイルの内容は、次のようになります。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
        "Action": "sts:AssumeRole"
    }
}

RDS DB インスタンスへの読み取り専用アクセス権を持つ IAM ロールを作成します。セキュリティ要件に従って、IAM ロールに IAM ポリシーをアタッチします。

最初の AWS CLI コマンドは、IAM ロールを作成し、JSON ファイルの内容に従って、信頼関係を定義します。2 番目のコマンドは、ロールに AWS マネージドポリシー AmazonRDSReadOnlyAccess をアタッチします。セキュリティ要件に応じて、異なるポリシー (マネージドポリシーおよびカスタムポリシー) をアタッチすることができます。3 番目のコマンドは、IAM ロール test-role にアタッチされた IAM ポリシーを表示します。

aws iam create-role --role-name test-role --assume-role-policy-document file://test-role-trust-policy.json
aws iam attach-role-policy --role-name test-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
aws iam list-attached-role-policies --role-name test-role

test-user をチェックして、EC2 インスタンスへの読み取り専用アクセス権を持っており、test-role に割り当てることができることを確認します。test-user のアクセスキーを作成するには、次のコマンドを使用します。

aws iam create-access-key --user-name test-user

AWS CLI コマンドは、アクセスキーの ID および秘密アクセスキーを出力します。これらのキーはメモしておきます。

アクセスキーを構成するには、デフォルトのプロファイルまたは特定のプロファイルのいずれかを使用します。デフォルトのプロファイルを構成するには、aws configure を実行します。新しい特定のプロファイルを作成するには、aws configure --profile を実行します。ただし、 は適切な名前で置き換えてください。この例では、デフォルトのプロファイルを構成します。

aws configure
AWS Access Key ID [None]: <Access-Key-provided-by-create-access-key>
AWS Secret Access Key [None]: <Secret-Access-Key-provided-by-create-access-key>
Default region name [None]: eu-west-1
Default output format [None]: json

注: リージョン名には、あなたの AWS リージョンを指定してください。

AWS CLI コマンドを test-user として呼び出していることを確認するために、次のコマンドを実行します。

aws sts get-caller-identity

このコマンドは、ARN など、3 つの情報の断片を出力します。arn:aws:iam::123456789012:user/test-user のような出力が表示されます。これにより、AWS CLI コマンドが test-user によって呼び出されていることを確認することができます。

IAM ユーザーは EC2 インスタンスへの読み取り専用アクセス権を持っているけれども、RDS DB インスタンスへは何のアクセス権も持っていないことを確認するには、以下のコマンドを実行します。

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

最初の AWS CLI コマンドでは、すべての EC2 インスタンスが eu-west-1 リージョン内にあることが示されます。2 番目の AWS CLI コマンドでは、アクセス拒否のエラーメッセージが生成されます。test-user が RDS へのアクセス権を持っていないためです。

test-role を割り当てるには、次のコマンドを実行して、ロールの ARN を取得する必要があります。

aws iam list-roles --query "Roles[?RoleName == 'test-role'].[RoleName, Arn]"

このコマンドは IAM ロールをリストしますが、出力はロール名でフィルタリングされます。IAM ロールを割り当てるには、次のコマンドを実行します。

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/test-role" --role-session-name AWSCLI-Session

AWS CLI コマンドはいくつかの情報の断片を出力します。資格情報ブロックの内側には、AccessKeyIdSecretAccessKey、および SessionToken が必要になります。期限切れフィールドのタイムスタンプはメモしておきます。これは UTC タイムゾーンであり、IAM ロールの一時的資格情報が期限切れになる時刻を示しています。期限切れになると、sts:AssumeRole API 呼び出しを再び呼び出す必要があります。

aws sts assume-role を実行した後、IAM ロールを割り当てるために、3 つの環境変数を作成します。これらの環境変数には、以下の出力を埋め込みます。

export AWS_ACCESS_KEY_ID=<AccessKeyId>
export AWS_SECRET_ACCESS_KEY=<SecretAccessKey>
export AWS_SESSION_TOKEN=<SessionToken>

IAM ロールを割り当てたことを確認するには、以下のコマンドを実行します。

aws sts get-caller-identity

この AWS CLI コマンドは、arn:aws:sts::123456789012:assumed-role/test-role/AWSCLI-Session のような ARN を出力します。test-role を割り当てたことが確認できる arn:aws:iam::123456789012:user/test-user ではありません。

これで、RDS DB インスタンスへの読み取り専用アクセス権を持ち、EC2 インスタンスにはアクセス権のない IAM ロールを作成できました。確認するには、以下のコマンドを実行します。

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

最初のコマンドでは、アクセス拒否のエラーメッセージが生成され、2 番目のコマンドでは、RDS DB インスタンスが返されます。これで、この IAM ロールに割り当てた権限が正常に機能していることを確認することができました。

IAM ユーザーに戻るには、環境変数を削除します。

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
aws sts get-caller-identity

最初のコマンドは、環境変数を削除し、2 番目のコマンドは、test-user に戻ったことを確認します。

~/.aws/config ファイルにプロファイルを作成することで、ロールを使用することもできます。詳細については、「ロールの割り当て」を参照してください。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2017 年 9 月 6 日