あのときの、ほら!あれ、あれ!

SIer勤務のAWSなエンジニア(父)が好きなことをアウトプットして人生のなにがしかに役立てたり役立てなかったりするブログ

クロスアカウントでのリソース共有

こんにちは!

私の職場ではRAMで複数のAWSアカウントでTransitGatewayを共有しています。

このRAMでの共有の設定をいちいちGUIぽちぽちしているのが地味にめんどくさくて Lambdaで自動化できないか自宅で疑似環境環境作って試してみました。 (TransitGatewayはコストかかるので以下ではサブネット共有にしています)

そもそものクロスアカウントでリソース共有するところでつまずいたので 備忘的に残します。

結論

RAMで異なるアカウント間でリソース共有する際は、以下の設定を行う 1. AWS Organizationでリソースを共有したいアカウントを招待 2. AWS Organizationの設定でAWS のサービスに対する信頼されたアクセスAWS RAMへのアクセスを有効化

Lambdaで試していたコード

import json
import boto3
client = boto3.client('ram')

def lambda_handler(event, context):
    # TODO implement
    response = client.associate_resource_share(
    resourceShareArn='arn:aws:ram:ap-northeast-1:123456789/resource-share/hogehogehoge',

    principals=[
        '123456789-account-id',
    ],
)
    
    return response

エラーメッセージ

An error occurred (InvalidParameterException) when calling the AssociateResourceShare operation: The resource you are attempting to share can only be shared within your AWS Organization. This error may also occur if you have not enabled sharing with your AWS organization, or that onboarding process is still in progress.: InvalidParameterException

対処

  1. AWS Organizationでリソースを共有したいアカウントを招待 アカウントの追加から共有したいアカウントの招待を行います(特に難しいことはないので後続処理は省略します) f:id:nogasalog:20200221125024p:plain

  2. AWS Organizationの設定でAWS のサービスに対する信頼されたアクセスAWS RAMへのアクセスを有効化 f:id:nogasalog:20200221125811p:plain

はまったところ

2を実行するとAWS RAMの設定画面でも以下のように設定がグレーアウト(有効化)されるのですが 私はなぜかうまく連動されませんでした。 仕方ないので手動でチェックボックスにチェックを入れて設定の保存を実施

結果

無事にLambdaの処理が通ってくれました! f:id:nogasalog:20200221130446p:plain

RAMの共有プリンシパルにも追加されています f:id:nogasalog:20200221130648p:plain

あとは共有先で共有の承認をしないといけないのですが、一旦今回はここまでにします。