#
ドキュメント

Document

自分のための備忘録です。

IAM(AWS Identity and Access Management)

【確認】 IAMユーザー、IAMグループにロールを付与できるか(多分できない) ロールにスイッチ(AssumeRole)することはできる。

準備

  • assume:引き受ける
  • sts:AWS Security Token Service (AWS STS)
  • 認証(Authentication):本人確認
  • 認可(Authorization):リソースに対する使用権限付与

AWSユーザー

  • AWSアカウント
  • IAMユーザー

※ AWS Organizations(組織アカウント) 複数のアカウントのを管理

IAM登場人物

  • IAM ユーザー
  • IAM グループ
  • IAM ロール
  • IAM ポリシー
  • 信頼関係(信頼ポリシー)
  • パーミッション・バウンダリー
  • IAM アイデンティティ (ユーザー、ユーザーのグループ、ロール)

IAMポリシー

IAMポリシー 分類1

  • AWS 管理ポリシー(AWS managed policies)
    • AWSビルトインのスタンドアロンポリシー
  • カスタマー管理ポリシー(Customer managed policies)
    • カスタムのスタンドアロンポリシー
  • インラインポリシー(Inline policies)
    • IAM アイデンティティ (ユーザー、グループ、またはロール) に埋め込まれたポリシーです。つまり、ポリシーは本質的にアイデンティティの一部です。

    • スタンドアロンではない

※ ARNを持つポリシーをスタンドアロンポリシーと呼ぶ

ref. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_managed-vs-inline.html

IAMポリシー 分類2

  • アイデンティティベースのポリシ
    • 管理ポリシーとインラインポリシーを IAM アイデンティティ (ユーザー、ユーザーのグループ、ロール) にアタッチします。アイデンティティベースのポリシーでは、アクセス許可はアイデンティティに付与されます。

  • リソースベースのポリシー
    • インラインポリシーをリソースにアタッチします。リソースベースのポリシーとして最も一般的な例は、Amazon S3 バケットポリシーと IAM ロールの信頼ポリシーです。リソースベースのポリシーでは、アクセス許可は、ポリシーで指定されているプリンシパルに付与されます。プリンシパルは、リソースと同じアカウントか、別のアカウントになります。

ref. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html

IAMロール

AWSサービスアプリケーションに対してAWSの操作権限を与える仕組み。

大きく以下から構成される。

  • IAMポリシー:何ができるか
  • 信頼関係(信頼ポリシー):だれができるか

信頼関係(信頼ポリシー)

AssumeRolePolicyDocument The trust policy that is associated with this role. Trust policies define which entities can assume the role. You can associate only one trust policy with a role. For an example of a policy that can be used to assume a role, see Template Examples. For more information about the elements that you can use in an IAM policy, see IAM Policy Elements Reference in the IAM User Guide.

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-assumerolepolicydocument

信頼関係(信頼ポリシー)についてクロスアカウントロール(ユーザーからのみスイッチできるIAMロール)を例に説明する。 AWSの薄い本 IAMのマニアックな話 p39

クロスアカウントロールのスイッチ元の制限はCondition(条件)ではなくPrincipal(信頼関係)を利用する。

信頼関係の例(JSON)

{
  "Version": "2012-10-17",
  "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:iam::{{アカウントID}}:user/{{username}}"
        },
        "Action": "sts:AssumeRole",
        "Condition": {}
      }
  ]
}

スイッチロールを例にしたがCloudFormationCodePipelineなどAWSサービスに付与するのが一般的。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ecs.amazonaws.com",
          "elasticloadbalancing.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_principal.html

パーミッション・バウンダリー

バウンダリーは、IAMユーザーまたはIAMロールに対するアクセス制限として動作します。 付与した権限とBoundaryで許可した権限と重なる部分のみ有効な権限として動作します。

STS AWS Security Token Service

CloudFormation

AWS::IAM::Role

ポリシーのレファレンスはCloudFormationのレファレンスには掲載されていない?ので以下を参照する。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements.html