JSON ポリシー

  • 例)AssumeRolePolicyDocument

JSON ポリシードキュメント構造

  • Version – 使用するポリシー言語のバージョンを指定します。ベストプラクティスとして、最新の 2012-10-17 バージョンを使用してください。
  • Statement – このポリシーのメイン要素であり、以下の要素のコンテナになります。ポリシーには、複数のステートメントを含めることができます。
  • Sid (オプション) – 複数のステートメントを区別するための任意のステートメント ID が含まれます。
  • Effect – Allow または Deny を使用してポリシーで付与または拒否するアクセス許可を指定します。
  • Principal (一部の状況でのみ必須) リソースベースのポリシーを作成する場合は、アクセスを許可または拒否するアカウント、ユーザー、ロール、またはフェデレーティッドユーザーを指定する必要があります。ユーザーまたはロールにアタッチする IAM アクセス許可ポリシーを作成する場合は、この要素を含めることはできません。プリンシパルは、そのユーザーまたはロールを暗黙に示しています。
  • Action – ポリシーで許可または拒否するアクションのリストが含まれます。
  • Resource (一部の状況でのみ必須) IAM アクセス許可ポリシーを作成する場合は、アクションが適用されるリソースのリストを指定する必要があります。リソースベースのポリシーを作成する場合は、この要素はオプションです。この要素を含めない場合、アクションが適用されるリソースは、ポリシーがアタッチされているリソースです。
  • Condition (オプション) ポリシーでアクセス許可を付与する状況を指定します。

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

JSON ポリシーとCloudFormation

JSONポリシー(のYAML形式)はAWS::IAM::RoleAWS::ECR::RepositoryなどCloudFormationで使用される。

例 AWS::IAM::Role

Resources:
  EcsTaskExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
              - "ecs-tasks.amazonaws.com"
            Action:
            - "sts:AssumeRole"
      Path: "/"
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
        - arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess

上記AWS::IAM:RoleのAssumeRolePolicyDocumentでJSON ポリシーが使用されている。

Version: "2012-10-17"
Statement:
   - Effect: "Allow"
     Principal:
       Service:
       - "ecs-tasks.amazonaws.com"
     Action:
     - "sts:AssumeRole"

例 AWS::ECR::Repository

AWS::ECR::Repository

SampleRepository:
    Type: "AWS::ECR::Repository"
    Properties:
      RepositoryName: 'sample/repo'
      // .....
      // .....
      RepositoryPolicyText:
        Version: "2012-10-17"
        Statement:
          - Sid: playground
            Effect: Allow
            Principal:
              AWS:
                - !Sub "arn:aws:iam:::root"
            Action:
              - "ecr:GetDownloadUrlForLayer"
              - "ecr:BatchGetImage"
              - "ecr:BatchCheckLayerAvailability"

          - Sid: production
            Effect: Allow
            Principal:
              AWS:
                - !Sub "arn:aws:iam:::root"
            Action:
              - "ecr:GetDownloadUrlForLayer"
              - "ecr:BatchGetImage"
              - "ecr:BatchCheckLayerAvailability"

上記AWS::ECR::RepositoryRepositoryPolicyTextでJSON ポリシーが使用されている。

Statement:
  - Sid: playground
    Effect: Allow
    Principal:
      AWS:
        - !Sub "arn:aws:iam:::root"
    Action:
      - "ecr:GetDownloadUrlForLayer"
      - "ecr:BatchGetImage"
      - "ecr:BatchCheckLayerAvailability"

  - Sid: production
    Effect: Allow
    Principal:
      AWS:
        - !Sub "arn:aws:iam:::root"
    Action:
      - "ecr:GetDownloadUrlForLayer"
      - "ecr:BatchGetImage"
      - "ecr:BatchCheckLayerAvailability"