ハンズオン(簡易版): AWS JSONポリシー (入門)

1.3. ステートメントファイルの作成 (S3BucketListAndGetLocation.txt)

手順の目的

ステートメントファイル(S3BucketListAndGetLocation.txt)を作成します。

設定値の指定

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

1. ステートメントの識別子 (Sid)

ステートメントの識別子を指定します。

変数の設定:

AWS_POLICY_STATEMENT_SID='S3BucketListAndGetLocation'

2. ステートメントの効果 (Effect)

ステートメントの効果を指定します。

変数の設定:

AWS_POLICY_STATEMENT_EFFECT='Allow'

3. ステートメントファイル用ディレクトリ名

ステートメントファイル用ディレクトリ名を指定します。

変数の設定:

DIR_AWS_POLICY_STATEMENT_DOC="${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_AWS_POLICY_STATEMENT_DOC} > /dev/null 2>&1 \
  || mkdir -p ${DIR_AWS_POLICY_STATEMENT_DOC}

結果(例):

(出力なし)

4. ステートメントファイルファイル名

AWS_POLICYステートメントファイルファイル名を指定します。

変数の設定:

FILE_AWS_POLICY_STATEMENT_DOC="${DIR_AWS_POLICY_STATEMENT_DOC}/${AWS_POLICY_STATEMENT_SID}.txt" \
  && echo ${FILE_AWS_POLICY_STATEMENT_DOC}

結果(例):

/home/cloudshell-user/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/S3BucketListAndGetLocation.txt

5. ブロックファイル用ディレクトリ名

ブロックファイル用ディレクトリ名を指定します。

変数の設定:

DIR_AWS_POLICY_BLOCK_DOC="${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/block"

設定値の確認

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

変数の確認:

cat << END

  # 1. AWS_POLICY_STATEMENT_SID:"S3BucketListAndGetLocation"
       AWS_POLICY_STATEMENT_SID="${AWS_POLICY_STATEMENT_SID}"
  # 2. AWS_POLICY_STATEMENT_EFFECT:"Allow"
       AWS_POLICY_STATEMENT_EFFECT="${AWS_POLICY_STATEMENT_EFFECT}"
  # 3. DIR_AWS_POLICY_STATEMENT_DOC:"${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation"
       DIR_AWS_POLICY_STATEMENT_DOC="${DIR_AWS_POLICY_STATEMENT_DOC}"
  # 4. FILE_AWS_POLICY_STATEMENT_DOC:"${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/S3BucketListAndGetLocation.txt"
       FILE_AWS_POLICY_STATEMENT_DOC="${FILE_AWS_POLICY_STATEMENT_DOC}"
  # 5. DIR_AWS_POLICY_BLOCK_DOC:"${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/block"
       DIR_AWS_POLICY_BLOCK_DOC="${DIR_AWS_POLICY_BLOCK_DOC}"

END

各変数について、上の行と下の行の値の内容もしくは形式が同じであることを確認します。 もし異なる場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

ステートメントファイルを作成します。

変数の確認:

cat << END

  # FILE_AWS_POLICY_STATEMENT_DOC:"${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/S3BucketListAndGetLocation.txt"
    FILE_AWS_POLICY_STATEMENT_DOC="${FILE_AWS_POLICY_STATEMENT_DOC}"
  # AWS_POLICY_STATEMENT_SID:"S3BucketListAndGetLocation"
    AWS_POLICY_STATEMENT_SID="${AWS_POLICY_STATEMENT_SID}"
  # AWS_POLICY_STATEMENT_EFFECT:"Allow"
    AWS_POLICY_STATEMENT_EFFECT="${AWS_POLICY_STATEMENT_EFFECT}"
  # DIR_AWS_POLICY_BLOCK_DOC:"${HOME}/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/block"
    DIR_AWS_POLICY_BLOCK_DOC="${DIR_AWS_POLICY_BLOCK_DOC}"

END

コマンド:

echo "- Sid: '${AWS_POLICY_STATEMENT_SID}'" > ${FILE_AWS_POLICY_STATEMENT_DOC}
echo "  Effect: '${AWS_POLICY_STATEMENT_EFFECT}'" >> ${FILE_AWS_POLICY_STATEMENT_DOC}

for i in $( ls ${DIR_AWS_POLICY_BLOCK_DOC}/*.txt ); do \
  cat ${i} | sed '/^$/d' >> ${FILE_AWS_POLICY_STATEMENT_DOC}; \
done

cat ${FILE_AWS_POLICY_STATEMENT_DOC}

結果(例):

- Sid: ListAllS3Buckets
  Effect: Allow
  Action:
  - s3:ListBucket
  - s3:GetBucketLocation
  Resource: arn:aws:s3:::*

完了確認

「ステートメントファイル"/home/cloudshell-user/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/S3BucketListAndGetLocation.txt"が存在する。」ことを確認します。

コマンド:

ls ${FILE_AWS_POLICY_STATEMENT_DOC}

結果(例):

/home/cloudshell-user/conf-handson-awspolicy-1st/IdentityBasedPolicy/statement-S3BucketListAndGetLocation/S3BucketListAndGetLocation.txt

手順の完了