AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

AWS CLI を使用して IAM ロールを引き受ける方法を教えてください。

所要時間3分
0

AWS コマンドラインインターフェイス (AWS CLI) を使用して AWS Identity and Access Management (IAM) ロールを引き受けたいです。

解決策

**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

AWS CLI を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスへの読み取り専用アクセス許可を持つ IAM ロールを引き受けるには、以下のアクションを実行します。

重要: 次の手順のコマンドを実行すると、パスワードなどの認証情報がプレーンテキストで表示されます。IAM ロールを引き受けた後に、パスワードを変更することをお勧めします。

ロールを引き受けるアクセス許可を持つ IAM ユーザーを作成する

  1. 次のコマンドを使用して AWS CLI から IAM ユーザーを作成します。
    注: Bob は、お使いの IAM ユーザー名に置き換えてください。
  2. ユーザー Bob にアクセス許可を付与する IAM ポリシーを作成します。そのために、任意のテキストエディタを使用して IAM ポリシーを定義する JSON ファイルを作成します。次の JSON サンプル example-policy.json をテンプレートとして使用できます。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:Describe*",
            "iam:ListRoles",
            "sts:AssumeRole"
          ],
          "Resource": "*"
        }
      ]
    }

IAM ポリシーの作成の詳細については、「IAM ポリシーの作成」、「IAM アイデンティティベースのポリシーの例」、「IAM JSON ポリシーリファレンス」を参照してください。

IAM ポリシーを作成する

IAM ポリシーを作成するには、次の手順を実行します。

  1. 次の aws iam create-policy コマンドを実行します。
    aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json
    aws iam create-policy コマンドは、IAM ポリシーの ARN (Amazon リソースネーム) を含むいくつかの情報を次のように出力します。
    arn:aws:iam::123456789012:policy/example-policy
    注: 123456789012 は、お使いのアカウントに置き換えてください。
  2. 出力にある IAM ポリシー ARN を書き留め、attach-user-policy コマンドを使用してポリシーを Bob にアタッチします。次に、以下のように list-attached-user-policies コマンドを使用して、アタッチメントが適切に配置されていることを確認します。
    aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
    aws iam list-attached-user-policies --user-name Bob

IAM ロールの信頼関係を定義する JSON ファイルを作成する

テキストエディタを使用して、信頼関係を定義する JSON ファイルを作成します。例として、次の信頼ポリシーを使用できます。

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

この信頼ポリシーにより、アカウント 123456789012 のユーザーとロールは、アクセス許可ポリシーで sts:AssumeRole アクションを許可していれば、このロールを引き継ぐことができます。また、信頼関係を制限して、特定の IAM ユーザーのみが IAM ロールを引き受けられるようにすることもできます。これを行うには、arn:aws:iam::123456789012:user/example-username のようなプリンシパルを指定します。詳細については、「AWS JSON ポリシーの要素: Principal」を参照してください。

IAM ロールを作成してポリシーをアタッチする

Amazon Relational Database Service (Amazon RDS) インスタンスへの読み取り専用アクセス許可を持つ Bob が引き受けられる IAM ロールを作成します。IAM ユーザーが IAM ロールを引き受けられるようにするには、IAM ユーザーがそのロールを引き受けることを許可するプリンシパルを指定する必要があります。例えば、arn:aws:iam::123456789012:root のようなプリンシパルでは、アカウント 123456789012 のすべての IAM ID がその役割を引き受けることができます。詳細については、「IAM ユーザーにアクセス許可を委任するロールを作成する」を参照してください。

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

    aws iam create-role コマンドは IAM ロールを作成し、既に作成した JSON ファイルで定義した信頼関係を定義します。aws iam attach-role-policy コマンドは、AWS マネージドポリシー AmazonRDSReadOnlyAccess をロールにアタッチします。セキュリティ要件に応じて、さまざまなポリシー (管理ポリシーとカスタムポリシー) をアタッチできます。aws iam list-attached-role-policies コマンドを実行すると、IAM ロールの example-roleにアタッチされている IAM ポリシーが表示されます。例えば、次のコマンドを実行します。

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

    注: Bob が EC2 インスタンスへの読み取り専用アクセス許可を持ち、example-role を引き受けられることを確認します。

  2. 次のコマンドで Bob のアクセスキーを作成します。

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

    重要: この AWS CLI コマンドは、アクセスキー ID とシークレットアクセスキーを出力します。これらのキーは必ず書き留めておいてください。

アクセスキーを設定する

アクセスキーを設定するには、デフォルトのプロファイルまたは特定のプロファイルを使用します。デフォルトのプロファイルを設定するには、aws configure を実行します。新しいプロファイルを作成するには、aws configure --profile example_-_profile-name を実行します。この例では、デフォルトのプロファイルが次のように設定されています。

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

注:****[デフォルトリージョン名] ででAWS リージョンを指定します。

AWS CLI コマンドが呼び出されたことを検証し、IAM ユーザーアクセスを確認する

次の手順を実行します。

  1. 次のように aws sts get-caller-identity コマンドを実行します。

    aws sts get-caller-identity

    aws sts get-caller-identity コマンドの出力には ARN が含まれています。Bob により AWS CLI コマンドが呼び出されたことを確認するには、出力に arn:aws:iam::123456789012:user/Bob のような内容が含まれていることを確認します。

  2. 次のコマンドを実行して、IAM ユーザーが EC2 インスタンスへの読み取り専用アクセス許可を持ち、Amazon 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 ec2 describe-instances コマンドを実行すると、eu-west-1 リージョンにあるすべての EC2 インスタンスが表示されます。Bob は Amazon RDS にアクセスできないため、aws rds describe-db-instances コマンドを実行すると、アクセス拒否のエラーメッセージが生成されます。

IAM ロールを引き受ける

次のいずれかを実行します。

~/.aws/config ファイルに IAM ロールを使用するプロファイルを作成します。詳細については、「AWS CLI で IAM ロールを使用する」を参照してください。

または、

IAM ロールを引き受けるために、次のコマンドを実行します。

  1. 次のコマンドでロールの ARN を取得します。

    aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"
  2. このコマンドは IAM ロールを一覧表示しますが、出力はロール名でフィルター処理されます。IAM ロールを引き受けるには、次のコマンドを実行します。

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

これらのコマンドは、いくつかの情報を出力します。認証情報ブロック内では、AccessKeyIdSecretAccessKeySessionTokenが必要です。この例では、環境変数 RoleAccessKeyIDRoleSecretKeyRoleSessionTokenを使用しています。有効期限フィールドのタイムスタンプは UTC タイムゾーンであることに注意してください。タイムスタンプは、IAM ロールの一時的な認証情報がいつ期限切れになるかを示します。一時的な認証情報が期限切れになった場合は、sts:AssumeRole API コールを再度呼び出す必要があります。

注: DurationSeconds パラメータを使用すると、IAM ロールの一時的な認証情報の最大セッション有効期間を延ばすことができます。

IAM ロールを引き受けてアクセスを確認するための環境変数を作成する

  1. IAM ロールを引き受ける環境変数を 3 つ作成します。これらの環境変数には次の出力が含まれます。

    export AWS_ACCESS_KEY_ID=RoleAccessKeyID
    export AWS_SECRET_ACCESS_KEY=RoleSecretKey
    export AWS_SESSION_TOKEN=RoleSessionToken

    注: Windows システムの場合は、このコマンドの exportset に置き換えてください。

  2. 次のコマンドを実行して、IAM ロールを引き受けたことを確認します。

    aws sts get-caller-identity

    example-role を引き受けた場合は、この AWS CLI コマンドの出力では ARN が arn:aws:iam::123456789012:user/Bob ではなく、arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session となります。

  3. 次のコマンドを実行し、Amazon 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]"

    aws ec2 describe-instances コマンドを実行すると、アクセス拒否のエラーメッセージが生成されます。aws rds describe-db-instances コマンドは、Amazon RDS DB インスタンスを返します。これにより、IAM ロールに割り当てられたアクセス許可が正しく機能していることを確認できます。

  4. IAM ユーザーに戻るには、次のように環境変数を削除します。

    unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
    aws sts get-caller-identity

    unset コマンドで環境変数を削除し、aws sts get-caller-identity コマンドで IAM ユーザー Bob に復帰したことを確認します。

    **注:**Windows システムの場合は、次のように環境変数を空の文字列に設定して内容を消去します。

    SET AWS_ACCESS_KEY_ID=
    SET AWS_SECRET_ACCESS_KEY=
    SET AWS_SESSION_TOKEN=

関連情報

ロールに関する用語と概念

create-role

AWS のサービスにアクセス許可を委任するロールの作成

コメントはありません

関連するコンテンツ