ハンズオン(簡易版): S3基礎 レプリケーション

3.1. IAMポリシードキュメントの作成 (handson-cli-s3-replication-replication-S3BucketReplicationPolicy)

手順の目的 [why]

IAMポリシー"handson-cli-s3-replication-replication-S3BucketReplicationPolicy"のポリシードキュメントを作成します。

設定値の指定

手順に必要な設定値を変数に格納をします。

1. ポリシードキュメント用ディレクトリ名

ポリシードキュメント用ディレクトリ名を指定します。

変数の設定:

DIR_IAM_POLICY_DOC="${HOME}/environment/conf-handson-cli-s3-replication"

ディレクトリが存在することを確認します。

コマンド:

ls -d ${DIR_IAM_POLICY_DOC}

結果(例:存在する場合):

${HOME}/environment/conf-handson-cli-s3-replication

存在しない場合は作成します。

コマンド:

mkdir -p ${DIR_IAM_POLICY_DOC}

2. IAMポリシードキュメント名

IAMポリシードキュメント名を指定します。

変数の設定:

IAM_POLICY_DOC_NAME='handson-cli-s3-replication-replication-S3BucketReplicationPolicy'

変数の設定:

FILE_IAM_POLICY_DOC="${DIR_IAM_POLICY_DOC}/${IAM_POLICY_DOC_NAME}.json" \
  && echo ${FILE_IAM_POLICY_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-s3-replication/handson-cli-s3-replication-replication-S3BucketReplicationPolicy.json

3. レプリケーション元S3バケット名

レプリケーション元のS3バケット名を指定します。

変数の設定:

S3_BUCKET_PREFIX_SOURCE='handson-cli-s3-replication-replication-source'

コマンド:

AWS_ID=$( \
  aws sts get-caller-identity \
    --query 'Account' \
    --output text \
) \
  && echo ${AWS_ID}

結果(例):

XXXXXXXXXXXX

変数の設定:

S3_BUCKET_SOURCE="${S3_BUCKET_PREFIX_SOURCE}-${AWS_ID}" \
  && echo ${S3_BUCKET_SOURCE}

結果(例):

handson-cli-s3-replication-replication-source-XXXXXXXXXXXX

4. レプリケーション先S3バケット名

レプリケーション先のS3バケット名を指定します。

変数の設定:

S3_BUCKET_PREFIX_DESTINATION='handson-cli-s3-replication-replication-destination'

コマンド:

AWS_ID=$( \
  aws sts get-caller-identity \
    --query 'Account' \
    --output text \
) \
  && echo ${AWS_ID}

結果(例):

XXXXXXXXXXXX

変数の設定:

S3_BUCKET_DESTINATION="${S3_BUCKET_PREFIX_DESTINATION}-${AWS_ID}" \
  && echo ${S3_BUCKET_DESTINATION}

結果(例):

handson-cli-s3-replication-replication-destination-XXXXXXXXXXXX

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 1. DIR_IAM_POLICY_DOC:"${HOME}/environment/conf-handson-cli-s3-replication"
       DIR_IAM_POLICY_DOC="${DIR_IAM_POLICY_DOC}"
  # 2. IAM_POLICY_DOC_NAME:"handson-cli-s3-replication-replication-S3BucketReplicationPolicy"
       IAM_POLICY_DOC_NAME="${IAM_POLICY_DOC_NAME}"
  # 3. S3_BUCKET_SOURCE:"handson-cli-s3-replication-replication-source-XXXXXXXXXXXX"
       S3_BUCKET_SOURCE="${S3_BUCKET_SOURCE}"
  # 4. S3_BUCKET_DESTINATION:"handson-cli-s3-replication-replication-destination-XXXXXXXXXXXX"
       S3_BUCKET_DESTINATION="${S3_BUCKET_DESTINATION}"

END

処理の実行

IAMポリシードキュメントを作成します。

変数の確認:

cat << EOF

  # FILE_IAM_POLICY_DOC:"${HOME}/environment/conf-handson-cli-s3-replication/handson-cli-s3-replication-replication-S3BucketReplicationPolicy.json"
    FILE_IAM_POLICY_DOC="${FILE_IAM_POLICY_DOC}"
  # S3_BUCKET_SOURCE:"handson-cli-s3-replication-replication-source-XXXXXXXXXXXX"
    S3_BUCKET_SOURCE="${S3_BUCKET_SOURCE}"
  # S3_BUCKET_DESTINATION:"handson-cli-s3-replication-replication-destination-XXXXXXXXXXXX"
    S3_BUCKET_DESTINATION="${S3_BUCKET_DESTINATION}"

EOF

コマンド:

cat << EOF > ${FILE_IAM_POLICY_DOC}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect":"Allow",
      "Action":[
         "s3:GetObjectVersionForReplication",
         "s3:GetObjectVersionAcl"
      ],
      "Resource":[
        "arn:aws:s3:::${S3_BUCKET_SOURCE}/*"
      ]
    },
    {
      "Effect":"Allow",
      "Action":[
        "s3:ListBucket",
        "s3:GetReplicationConfiguration"
      ],
      "Resource":[
        "arn:aws:s3:::${S3_BUCKET_SOURCE}"
      ]
    },
    {
      "Effect":"Allow",
      "Action":[
        "s3:ReplicateObject",
        "s3:ReplicateDelete",
        "s3:ReplicateTags",
        "s3:GetObjectVersionTagging"
      ],
      "Resource":"arn:aws:s3:::${S3_BUCKET_DESTINATION}/*"
    }
  ]
}
EOF

cat ${FILE_IAM_POLICY_DOC}

結果(例):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect":"Allow",
      "Action":[
        "s3:GetObjectVersionForReplication",
        "s3:GetObjectVersionAcl"
      ],
      "Resource":[
        "arn:aws:s3:::handson-cli-s3-replication-replication-source-XXXXXXXXXXXX/*"
      ]
    },
    {
      "Effect":"Allow",
      "Action":[
        "s3:ListBucket",
        "s3:GetReplicationConfiguration"
      ],
      "Resource":[
        "arn:aws:s3:::handson-cli-s3-replication-replication-source-XXXXXXXXXXXX"
      ]
    },
    {
      "Effect":"Allow",
      "Action":[
        "s3:ReplicateObject",
        "s3:ReplicateDelete",
        "s3:ReplicateTags",
        "s3:GetObjectVersionTagging"
      ],
      "Resource":"arn:aws:s3:::handson-cli-s3-replication-replication-destination-XXXXXXXXXXXX/*"
    }
  ]
}

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド:

cat ${FILE_IAM_POLICY_DOC} \
  |  python3 -m json.tool \
  > /dev/null

結果(例):

(出力なし)

注釈

エラーが出力されなければOKです。

完了確認

「IAMポリシードキュメント"${HOME}/environment/conf-handson-cli-s3-replication/handson-cli-s3-replication-replication-S3BucketReplicationPolicy.json"が存在する。」ことを確認します。

コマンド:

ls ${FILE_IAM_POLICY_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-s3-replication/handson-cli-s3-replication-replication-S3BucketReplicationPolicy.json